//"The contents of this file are subject to the Mozilla Public License
//Version 1.1 (the "License"); you may not use this file except in
//compliance with the License. You may obtain a copy of the License at
//http://www.mozilla.org/MPL/

//Software distributed under the License is distributed on an "AS IS"
//basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
//License for the specific language governing rights and limitations
//under the License.

//The Original Code is TSharp.

//The Initial Developer of the Original Code is Mar3ek (http://mar3ek.wordpress.com).
//Portions created by Mar3ek are Copyright (C) 2010
//Mar3ek (http://mar3ek.wordpress.com). All Rights Reserved.

//Contributor(s): ______________________________________.

//Alternatively, the contents of this file may be used under the terms
//of the _____ license (the  "[___] License"), in which case the
//provisions of [______] License are applicable instead of those
//above.  If you wish to allow use of your version of this file only
//under the terms of the [____] License and not to allow others to use
//your version of this file under the MPL, indicate your decision by
//deleting  the provisions above and replace  them with the notice and
//other provisions required by the [___] License.  If you do not delete
//the provisions above, a recipient may use your version of this file
//under either the MPL or the [___] License."

using System;

namespace TSharp
{
    ///<summary>
    /// Class representing a Twitter's list
    ///</summary>
    public class TwitterList
    {
        private readonly string _description;
        private readonly string _fullName;
        private readonly ulong _id;
        private readonly ulong _memberCount;
        private readonly ListMode _mode;
        private readonly string _name;
        private readonly TwitterUser _owner;
        private readonly string _slug;
        private readonly ulong _subscriberCount;
        private readonly string _uri;

        ///<summary>
        /// Creates a new instance od the TwitterList class
        ///</summary>
        ///<param name="id">ID of the list</param>
        ///<param name="name">Name of the list</param>
        ///<param name="fullName">Full name of the list</param>
        ///<param name="slug">Slug o the list</param>
        ///<param name="description">Description of the list</param>
        ///<param name="subscriberCount">Number of list's subscribers</param>
        ///<param name="memberCount">Number of the list's members</param>
        ///<param name="uri">URI of the list</param>
        ///<param name="mode">Mode of the list</param>
        ///<param name="owner">Owner of the list</param>
        ///<exception cref="ArgumentOutOfRangeException"></exception>
        internal TwitterList(ulong id, string name, string fullName, string slug, string description, ulong subscriberCount,
                           ulong memberCount, string uri, string mode, TwitterUser owner)
        {
            _id = id;
            _name = name;
            _fullName = fullName;
            _slug = slug;
            _description = description;
            _subscriberCount = subscriberCount;
            _memberCount = memberCount;
            _uri = uri;
            _owner = owner;

            switch (mode.ToLower())
            {
                case "public":
                    _mode = ListMode.Public;
                    break;
                case "private":
                    _mode = ListMode.Private;
                    break;
                default:
                    throw new ArgumentOutOfRangeException("mode");
            }
        }

        ///<summary>
        /// ID of the list
        ///</summary>
        public ulong Id
        {
            get { return _id; }
        }

        ///<summary>
        /// Name of the list
        ///</summary>
        public string Name
        {
            get { return _name; }
        }

        ///<summary>
        /// Full name of the list
        ///</summary>
        public string FullName
        {
            get { return _fullName; }
        }

        ///<summary>
        /// Slug of the list
        ///</summary>
        public string Slug
        {
            get { return _slug; }
        }

        ///<summary>
        /// Description of the list
        ///</summary>
        public string Description
        {
            get { return _description; }
        }

        ///<summary>
        /// Number of list's subscribers
        ///</summary>
        public ulong SubscriberCount
        {
            get { return _subscriberCount; }
        }

        ///<summary>
        /// Number of list's members
        ///</summary>
        public ulong MemberCount
        {
            get { return _memberCount; }
        }

        ///<summary>
        /// URI of the list
        ///</summary>
        public string Uri
        {
            get { return _uri; }
        }

        ///<summary>
        /// Mode of the list
        ///</summary>
        public ListMode Mode
        {
            get { return _mode; }
        }

        ///<summary>
        /// Owner of the list
        ///</summary>
        public TwitterUser Owner
        {
            get { return _owner; }
        }
    }
}